home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 23.zip / BS1 part 23 / Vector Designer v1.0.adf / Sources / lineexample.S < prev    next >
Text File  |  1996-03-29  |  9KB  |  498 lines

  1. *******************************************************
  2. ***   Line Vector example for TSB's Vectordesigner  ***
  3. ***   --------------------------------------------  ***
  4. ***                                                 ***
  5. ***               written by ALLOC                  ***
  6. ***                                                 ***
  7. *******************************************************
  8. ;---------------------------------------
  9. ; a  (return)
  10. ;(return)
  11. ; y  (return)
  12. ; jm (return)
  13.  
  14. >extern    "df0:readyobjects/lineship.l",lineobject
  15. org    $30000
  16. load    $30000
  17.  
  18. clear:     MACRO
  19.     lea    $dff000,a5
  20.     move.l    ?1,$54(a5)
  21.     move.w    ?2,d0       ;x
  22.     move.w    ?3,d1       ;y
  23.     move.w    #$0,$66(a5)
  24.     move.w    #%0000000100000000,$40(a5)
  25.     move.w    #0,$42(a5)
  26.     lsl.w    #6,d1
  27.     or.w    d1,d0
  28.     move.w    d0,$58(a5)
  29.     ENDM
  30.  
  31.  
  32. m:
  33.     
  34.          lea    $dff000,a5
  35.         movem.l    d0-d7/a0-a6,-(a7)
  36.         moveq    #61,d0
  37.         lea    zero,a0
  38.         lea    8,a1
  39. copyzero:    move.l    (a1)+,(a0)+
  40.         dbf    d0,copyzero
  41.         move.l    #raus,$020
  42. raus:        move.w    #$2700,sr
  43.         adda    #6,a7
  44.         move.l    a7,sstack
  45.         move.l    #stackend,a7
  46.         move.w    $1c(a5),intbuff
  47.         move.w    #$7fff,$9a(a5)
  48.         move.w    #$7fff,$9c(a5)
  49.         bra.L    main        
  50. oson:        move.w    #$2700,sr
  51.         move.w    #$7fff,$9a(a5)
  52.         move.w    intbuff(pc),d0
  53.         ori.w    #$8000,d0
  54.         move.w    d0,$9a(a5)
  55.         moveq    #61,d0
  56.         lea    zero(pc),a0
  57.         lea    8,a1
  58. zeroback:    move.l    (a0)+,(a1)+
  59.         dbf    d0,zeroback
  60.         move.l    sstack(pc),a7
  61.         move.w    #0,sr
  62.         movem.l    (a7)+,d0-d7/a0-a6
  63.         rts
  64. grname:        dc.b    "graphics.library",0
  65.         align    4
  66.  
  67. zero:        blk.l    62,0
  68.         align    4
  69. sstack:        dc.l    0
  70. stack:        blk.b    4048
  71. stackend:
  72.         align    4
  73.  
  74. intbuff:    dc.l    0
  75.         align    4
  76. main:        
  77. **********************
  78. *** Voreinstellung ***
  79. **********************
  80.  
  81.     lea    $dff000,a5
  82.     move.l    #$ffffffff,$44(a5)
  83.     move.w    #%1000010000000000,$96(a5)
  84.     move.w    #%0000011111111111,$96(a5)
  85.     move.l  #copperlist,$80(a5)
  86.      clr.w   $88(a5)
  87.     move.w  #%1000011111000000,$96(a5)
  88.     lea    hauptloop(pc),a4
  89.     move.l    a4,$6c        
  90.     move.w    #$c010,$9a(a5)
  91.     move.w    #$2000,sr
  92.  
  93. ************
  94. *** Wait ***
  95. ************
  96.  
  97. wait:    
  98.     move.l    $dff004,d0
  99.     and.l    #$1ff00,d0
  100.     cmp.l    #$ff00,d0
  101.     ble.s    wait
  102.     moveq    #0,d0
  103.     bsr    v_lines
  104.  
  105.     move.l    workplane,a0
  106.     move.l    showplane,workplane
  107.     move.l    a0,showplane    
  108.     btst    #6,$bfe001
  109.     beq    end
  110.     bra    wait        
  111. **************************
  112. ******    Hauptteil  *******
  113. **************************
  114.  
  115. hauptloop:
  116.     move.w    #$10,$dff09c        
  117.     movem.l    d0-d7/a0-a6,-(a7)
  118.     lea    bob1adrs,a0
  119.     move.l    showplane,d0
  120.     moveq    #0,d7
  121. planesset:
  122.     swap    d0
  123.     move.w    d0,2(a0)
  124.     swap    d0
  125.     move.w    d0,6(a0)
  126.     add.l    #8,a0
  127.     add.l    #[200*40],d0
  128.     dbf    d7,planesset
  129. hplend:
  130.     movem.l    (a7)+,d0-d7/a0-a6
  131.     rte                
  132.  
  133.  
  134. workplane:
  135.     dc.l    $60000
  136. showplane:
  137.     dc.l    $70000
  138.  
  139.  
  140.  
  141.  
  142. ***************
  143. *** E N D E ***
  144. ***************
  145.  
  146.  
  147. end:        
  148.         lea    $dff000,a5
  149.         move.l    4,a6
  150.         lea    grname(pc),a1
  151.         clr.l    d0
  152.         jsr    -408(a6)
  153.         move.l    d0,a4
  154.         move.l    38(a4),$80(a5)
  155.         clr.w    $88(a5)
  156.         move.w    #$83f0,$96(a5)
  157.         jmp    oson
  158.         
  159. copperlist:
  160.                 dc.w    $008e,$2981,$0090,$29c1
  161.         dc.w    $0092,$0038,$0094,$00d0
  162.          dc.w    $0108,$0000,$010a,$0000
  163.              dc.w    $0102,$0000,$0104,$0024
  164.         dc.w    $120,$0,$122,$0
  165.         dc.w    $124,$0,$126,$0
  166.         dc.w    $128,$0,$12a,$0
  167.         dc.w    $12c,$0,$12e,$0
  168.         dc.w    $130,$0,$132,$0
  169.         dc.w    $134,$0,$136,$0
  170.         dc.w    $138,$0,$13a,$0
  171.         dc.w    $13c,$0,$13e,$0
  172.         dc.w    $100,$0200
  173.         dc.w    $9c,$8010
  174. tsbcolors:
  175.         dc.w    $182,0,$182,$f00
  176.         
  177.         dc.w    $4809,$fffe
  178. bob1adrs:
  179.         dc.w    $00e0,$0006,$00e2,$4000
  180.         dc.w    $4a09,$fffe
  181.         dc.w    $100,$1200
  182.         dc.w    $ffe1,$fffe
  183.         dc.w    $0809,$fffe
  184.         dc.w    $100,$0200
  185.         dc.w    $ffff,$fffe
  186.  
  187. v_lines:
  188.     move.w    #$f,$dff180
  189.     clear    workplane,#20,#200
  190.     addq.w    #2,anglex
  191.     addq.w    #2,angley
  192.     addq.w    #2,anglez
  193.     move.w    #$1ff,d7
  194.     and.w    d7,anglex
  195.     and.w    d7,angley
  196.     and.w    d7,anglez
  197.  
  198.     lea    lineobject,a6
  199.     lea    drawtable,a5
  200. lineloop:
  201.     move.w    (a6)+,d0
  202.     cmp.w    #$7fff,d0
  203.     beq    lineloop2
  204.     move.w    (a6)+,d1
  205.     move.w    (a6)+,d2
  206.     addq.l    #2,a6
  207.     move.w    anglex(pc),a0
  208.     move.w    angley(pc),a1
  209.     move.w    anglez(pc),a2
  210.  
  211.     bsr    rotate
  212.     add.w    #400,d2
  213.     ext.l    d0
  214.     ext.l    d1
  215.     ext.l    d2
  216.     asl.l    #8,d0
  217.     asl.l    #8,d1
  218.     divs    d2,d0
  219.     divs    d2,d1
  220.     add.w    #160,d0
  221.     add.w    #100,d1
  222.     move.w    d0,(a5)+
  223.     move.w    d1,(a5)+
  224.     bra    lineloop
  225. lineloop2:
  226.     move.w    #$7fff,(a5)
  227.     
  228.     lea    drawtable(pc),a5
  229.     lea    lineobject+1024(pc),a6    
  230. lineloop3:
  231.     move.w    (a6)+,d5
  232.     cmp.w    #$7fff,d5
  233.     beq.s    lineloop4
  234.     move.w    (a6)+,d6
  235.     lsl.w    #2,d5
  236.     lsl.w    #2,d6
  237.     move.w    (a5,d5.w),d0
  238.     move.w    2(a5,d5.w),d1
  239.     move.w    (a5,d6.w),d2
  240.     move.w    2(a5,d6.w),d3
  241.  
  242.     move.l    workplane,a0
  243.     lea    40,a1
  244.     bsr    linedraw
  245.     bra    lineloop3
  246. lineloop4:
  247.     clr.w    $dff180
  248.     rts
  249.  
  250. anglex:
  251.     dc.w    0
  252. angley:
  253.     dc.w    0
  254. anglez:
  255.     dc.w    0
  256.  
  257. drawtable:
  258.     blk.b    1000,0
  259.  
  260.  
  261. lineobject:
  262.     blk.b    2000,0
  263.  
  264.  
  265. ********************
  266. *** 3-D Rotieren ***
  267. ********************
  268. ;d0,d1,d2   x,y,z
  269. ;a0,a1,a2   umx,umy,umz
  270.  
  271. rotate:
  272.     movem.l    d3-d7/a3-a6,-(a7)
  273.     lea    costable(pc),a3
  274.     lea    sintable(pc),a4
  275.     cmp.w    #0,a2
  276.     beq    rot_1
  277.     move.w    d0,d4
  278.     move.w    d1,d5
  279.     muls    (a3,a2.w),d4
  280.     muls    (a4,a2.w),d5
  281.     sub.l    d5,d4
  282.     asr.l    #8,d4
  283.     move.w    d4,d6
  284.     move.w    d0,d4
  285.     move.w    d1,d5
  286.     muls    (a4,a2.w),d4
  287.     muls    (a3,a2.w),d5
  288.     add.l    d4,d5
  289.     asr.l    #8,d5
  290.     move.w    d5,d1
  291.     move.w    d6,d0
  292. rot_1:
  293.     cmp.w    #0,a0
  294.     beq    rot_2
  295.     move.w    d2,d4
  296.     move.w    d1,d5
  297.     muls    (a3,a0.w),d4
  298.     muls    (a4,a0.w),d5
  299.     sub.l    d5,d4
  300.     asr.l    #8,d4
  301.     move.w    d4,d6
  302.     move.w    d2,d4
  303.     move.w    d1,d5
  304.     muls    (a4,a0.w),d4
  305.     muls    (a3,a0.w),d5
  306.     add.l    d4,d5
  307.     asr.l    #8,d5
  308.     move.w    d5,d1
  309.     move.w    d6,d2
  310. rot_2:
  311.     cmp.w    #0,a1
  312.     beq    rot_end
  313.     move.w    d0,d4
  314.     move.w    d2,d5
  315.     muls    (a3,a1.w),d4
  316.     muls    (a4,a1.w),d5
  317.     sub.l    d5,d4
  318.     asr.l    #8,d4
  319.     move.w    d4,d6
  320.     move.w    d0,d4
  321.     move.w    d2,d5
  322.     muls    (a4,a1.w),d4
  323.     muls    (a3,a1.w),d5
  324.     add.l    d4,d5
  325.     asr.l    #8,d5
  326.     move.w    d5,d2
  327.     move.w    d6,d0
  328. rot_end:
  329.     movem.l    (a7)+,d3-d7/a3-a6
  330.     rts
  331.  
  332.  
  333. costable:
  334.  
  335.     dc.w    256,256,256,255,255,254,253,252
  336.     dc.w    251,250,248,247,245,243,241,239
  337.     dc.w    237,234,231,229,226,223,220,216
  338.     dc.w    213,209,206,202,198,194,190,185
  339.     dc.w    181,177,172,167,162,157,152,147
  340.     dc.w    142,137,132,126,121,115,109,104
  341.     dc.w    98,92,86,80,74,68,62,56
  342.     dc.w    50,44,38,31,25,19,13,6
  343.     dc.w    0,-5,-12,-18,-24,-30,-37,-43
  344.     dc.w    -49,-55,-61,-67,-73,-79,-85,-91
  345.     dc.w    -97,-103,-108,-114,-120,-125,-131,-136
  346.     dc.w    -141,-146,-151,-156,-161,-166,-171,-176
  347.     dc.w    -180,-184,-189,-193,-197,-201,-205,-208
  348.     dc.w    -212,-215,-219,-222,-225,-228,-230,-233
  349.     dc.w    -236,-238,-240,-242,-244,-246,-247,-249
  350.     dc.w    -250,-251,-252,-253,-254,-254,-255,-255
  351.     dc.w    -255,-255,-255,-254,-254,-253,-252,-251
  352.     dc.w    -250,-249,-247,-246,-244,-242,-240,-238
  353.     dc.w    -236,-233,-230,-228,-225,-222,-219,-215
  354.     dc.w    -212,-208,-205,-201,-197,-193,-189,-184
  355.     dc.w    -180,-176,-171,-166,-161,-156,-151,-146
  356.     dc.w    -141,-136,-131,-125,-120,-114,-108,-103
  357.     dc.w    -97,-91,-85,-79,-73,-67,-61,-55
  358.     dc.w    -49,-43,-37,-30,-24,-18,-12,-5
  359.     dc.w    0,6,13,19,25,31,38,44
  360.     dc.w    50,56,62,68,74,80,86,92
  361.     dc.w    98,104,109,115,121,126,132,137
  362.     dc.w    142,147,152,158,162,167,172,177
  363.     dc.w    181,185,190,194,198,202,206,209
  364.     dc.w    213,216,220,223,226,229,231,234
  365.     dc.w    237,239,241,243,245,247,248,250
  366.     dc.w    251,252,253,254,255,255,256,256
  367.  
  368.  
  369.  
  370. sintable:
  371.  
  372.     dc.w    0,-5,-12,-18,-24,-30,-37,-43
  373.     dc.w    -49,-55,-61,-67,-73,-79,-85,-91
  374.     dc.w    -97,-103,-108,-114,-120,-125,-131,-136
  375.     dc.w    -141,-146,-151,-156,-161,-166,-171,-176
  376.     dc.w    -180,-184,-189,-193,-197,-201,-205,-208
  377.     dc.w    -212,-215,-219,-222,-225,-228,-230,-233
  378.     dc.w    -236,-238,-240,-242,-244,-246,-247,-249
  379.     dc.w    -250,-251,-252,-253,-254,-254,-255,-255
  380.     dc.w    -255,-255,-255,-254,-254,-253,-252,-251
  381.     dc.w    -250,-249,-247,-246,-244,-242,-240,-238
  382.     dc.w    -236,-233,-230,-228,-225,-222,-219,-215
  383.     dc.w    -212,-208,-205,-201,-197,-193,-189,-184
  384.     dc.w    -180,-176,-171,-166,-161,-156,-151,-146
  385.     dc.w    -141,-136,-131,-125,-120,-114,-108,-103
  386.     dc.w    -97,-91,-85,-79,-73,-67,-61,-55
  387.     dc.w    -49,-43,-37,-30,-24,-18,-12,-5
  388.     dc.w    0,6,13,19,25,31,38,44
  389.     dc.w    50,56,62,68,74,80,86,92
  390.     dc.w    98,104,109,115,121,126,132,137
  391.     dc.w    142,147,152,158,162,167,172,177
  392.     dc.w    181,185,190,194,198,202,206,209
  393.     dc.w    213,216,220,223,226,229,231,234
  394.     dc.w    237,239,241,243,245,247,248,250
  395.     dc.w    251,252,253,254,255,255,256,256
  396.     dc.w    256,256,256,255,255,254,253,252
  397.     dc.w    251,250,248,247,245,243,241,239
  398.     dc.w    237,234,231,229,226,223,220,216
  399.     dc.w    213,209,206,202,198,194,190,185
  400.     dc.w    181,177,172,167,162,157,152,147
  401.     dc.w    142,137,132,126,121,115,109,104
  402.     dc.w    98,92,86,80,74,68,62,56
  403.     dc.w    50,44,38,31,25,19,13,6
  404.  
  405. ***********************
  406. **** Blitterlinien ****
  407. ***********************
  408. ;a1 Breite   a0 ADR
  409.  
  410. linedraw:
  411.     movem.l    d4-d7/a2-a6,-(a7)
  412.     move.w    #%1000010000000000,$dff096
  413.     cmp.w    d0,d2
  414.     bne.s    li_weiter
  415.     cmp.w    d1,d3
  416.     beq    li_end
  417. li_weiter:
  418.  
  419.     cmp.w    d1,d3
  420.     bgt.s    linedir
  421.     exg    d1,d3
  422.     exg    d0,d2
  423. linedir:
  424.     lea    $dff000,a5
  425.     move.l    a1,d4
  426.     mulu    d1,d4
  427.     move.w    #$fff0,d5
  428.     and.w    d0,d5
  429.     lsr.w    #3,d5
  430.     add.w    d5,d4
  431.     add.l    a0,d4
  432.     moveq    #0,d5
  433.     sub.w    d1,d3
  434.     roxl.b    #1,d5
  435.     tst.w    d3
  436.     bge.s    li_y2gy1
  437.     neg.w    d3
  438. li_y2gy1:
  439.     sub.w    d0,d2
  440.     roxl.b    #1,d5
  441.     tst.w    d2
  442.     bge.s    li_x2gx1
  443.     neg.w    d2
  444. li_x2gx1:
  445.     move.w    d3,d1
  446.     sub.w    d2,d1
  447.     bge.s    li_dygdx
  448.     exg    d2,d3
  449. li_dygdx:
  450.     roxl.b    #1,d5
  451.     move.b    li_okttable(pc,d5),d5
  452.     add.w    d2,d2
  453. li_wait:
  454.     btst    #14,2(a5)
  455.     bne.s    li_wait    
  456.     move.w    d2,$62(a5)
  457.     sub.w    d3,d2
  458.     bge.s    li_signnl
  459.     or.b    #$40,d5
  460. li_signnl:
  461.  
  462.     move.w    d2,$52(a5)
  463.     sub.w    d3,d2
  464.     move.w    d2,$64(a5)
  465.     move.w    #$8000,$74(a5)
  466. linemask:
  467.     move.w    #$ffff,$72(a5)
  468.     move.w    #$ffff,$44(a5)
  469.     and.w    #$f,d0
  470.     ror.w    #4,d0
  471.     or.w    d0,d5
  472.     or.w    #$0bca,d0
  473.     move.w    d0,$40(a5)
  474.     move.w    d5,$42(a5)
  475.     move.l    d4,$48(a5)
  476.     move.l    d4,$54(a5)
  477.     move.w    a1,$60(a5)
  478.     move.w    a1,$66(a5)
  479.     lsl.w    #6,d3
  480.     addq.w    #2,d3
  481.     move.w    d3,$58(a5)
  482.  
  483. li_end:            
  484.     movem.l    (a7)+,d4-d7/a2-a6
  485.     rts
  486. li_okttable:
  487.     dc.b    0*4+1
  488.     dc.b    4*4+1
  489.     dc.b    2*4+1
  490.     dc.b    5*4+1
  491.     dc.b    1*4+1
  492.     dc.b    6*4+1
  493.     dc.b    3*4+1
  494.     dc.b    7*4+1
  495.  
  496.  
  497.  
  498.